/**
 * 
 */
package com.proyecto.personas.modelo.servicio;

import java.util.List;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.personas.modelo.dto.CombosDatos;
import com.proyecto.personas.modelo.dto.CorrelativosPersId;
import com.proyecto.personas.modelo.dto.Direcciones;

/**
 * @author vico
 *
 */
public class ServicioTablaApoyoCombosDatos extends ServicioGenerico {

	/**
	 * 
	 */
	ServicioCorrelativosPersonas 	servicioCorrelativosPersona;
	
	public ServicioTablaApoyoCombosDatos() {
		// TODO Auto-generated constructor stub
	}


	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		

		CombosDatos objCombosDatos = (CombosDatos)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objCombosDatos);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosPersona.obtenerProximoNumeroComoString(
					new CorrelativosPersId (objCombosDatos.getId().getCiaopr(), "COMBOSDATOS","cmbsdtocod" ) ,true);

			objCombosDatos.getId().setCmbsdtocod( Integer.parseInt(proxNumero) );

	
			super.incluir(objCombosDatos, iniciaTransaccion);

		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioTablaApoyoCombosDatos::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.CombosDatos.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	public Integer sumarIndice_Bishop(String construccionWhere){
		Integer indice = -1;
		Long sindice;
		List lstCombosDatos = null;
		
		try {

			String sql = "SELECT SUM(CAST(cmbsdtovalorcod AS int)) AS cmbsdtovalorcod FROM CombosDatos tabla WHERE tabla.id.ciaopr='1'" +
								" and cmbsdtocod in" + construccionWhere;
			System.out.println("sumarIndice_Bishop.sql:" + sql);
			lstCombosDatos = propiedadDAO.ejecutarQueryConsulta(sql);	

			if (lstCombosDatos.get(0) != null){
				//esto no funciona en tiempo de produccion...
				//sindice = (Long)lstCombosDatos.get(0);
				//indice = Integer.parseInt(sindice.toString());
				//System.out.println("sindice: " + sindice);

				indice = (Integer)lstCombosDatos.get(0);
				System.out.println("indice: " + indice);
			}
		} catch (Exception e) {
			// TODO: handle exception
			indice = -1;
			System.err.println("e.sumarIndice_Bishop: " + e.getMessage());
		}
		return indice;
	}
	
	public ServicioCorrelativosPersonas getServicioCorrelativosPersona() {
		return servicioCorrelativosPersona;
	}

	public void setServicioCorrelativosPersona(
			ServicioCorrelativosPersonas servicioCorrelativosPersona) {
		this.servicioCorrelativosPersona = servicioCorrelativosPersona;
	}

}
